tg-me.com/machinelearning_interview/1787
Last Update:
🧩 Задача для продвинутых дата-сайентистов: "Парадоксальная корреляция"
📖 Описание задачи
У вас есть DataFrame df
с данными о рекламных кампаниях:
import pandas as pd
data = {
'campaign_id': [1, 2, 3, 4, 5, 6],
'spend': [1000, 1500, 1200, None, 2000, 1700],
'revenue': [2000, 2300, 2500, 1800, None, 2700]
}
df = pd.DataFrame(data)
print(df)
Результат:
campaign_id spend revenue
0 1 1000.0 2000.0
1 2 1500.0 2300.0
2 3 1200.0 2500.0
3 4 NaN 1800.0
4 5 2000.0 NaN
5 6 1700.0 2700.0
Вам нужно посчитать корреляцию между spend и revenue.
Вы пишете:
correlation = df['spend'].corr(df['revenue'])
print(correlation)
И получаете:
nan
❗️Но вы уверены, что данные связаны (чем больше spend, тем больше revenue), а Pandas возвращает NaN.
📝 Ваша задача:
1. Почему Pandas возвращает
NaN
?2. Как правильно посчитать корреляцию?
3. Как бы вы обработали такие данные в продакшн-пайплайне?
---
🎯 Подвох (ключевой момент):
Метод
corr()
автоматически игнорирует строки, где хотя бы одно значение NaN.В этом DataFrame остаются только строки с индексами 0, 1, 2, 5.
→ На этих данных корреляция может быть рассчитана.
Но главная проблема — тип данных.
Если данные были считаны, например, из CSV, где пустые значения остались строками, то Pandas определит колонку как
object
, а не float64
:
print(df.dtypes)
Вывод:
spend object
revenue object
И тогда
corr()
вернёт NaN, потому что не смог интерпретировать данные как числовые.---
💡 Решение:
1. Проверить типы данных:
```python
print(df.dtypes)
```
2. Привести к числовому типу:
```python
df['spend'] = pd.to_numeric(df['spend'], errors='coerce')
df['revenue'] = pd.to_numeric(df['revenue'], errors='coerce')
```
3. Посчитать корреляцию без NaN:
```python
correlation = df[['spend', 'revenue']].dropna().corr().iloc[0, 1]
print(correlation)
```
✅ Теперь корреляция рассчитана корректно.
---
🔥 Дополнительный подвох:
А что если CSV-файл считан с
delimiter=';'
→ Тогда весь DataFrame будет одной колонкой с типом object, а Pandas не сможет даже начать обработку.
---
📝 Что проверяет задача:
✅ Понимание, как Pandas обрабатывает NaN и object
✅ Внимательность к типам данных
✅ Умение находить ошибки при чтении и парсинге данных
✅ Опыт очистки и предобработки грязных данных
🔥 Отличная проверка на внимательность и глубину работы с Pandas!
BY Machine learning Interview
Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283
Share with your friend now:
tg-me.com/machinelearning_interview/1787